<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>

</body>

<script>
  //逻辑 &&（与运算）
  console.log(true && 'hello');  // 'hello'
  console.log(false && 'hello'); // false
  console.log('hello' && true);  // true
  console.log('hello' && false); // false

  // 如果左操作数为真值，那么返回右操作数的值；
  // 如果左操作数为假值，那么返回左操作数的值。
  // 一旦遇到第一个假值，就会立即返回这个假值，并且不会继续计算后续的操作数

  // 逻辑 ||（或运算）

  console.log(true || 'hello');  // true
  console.log(false || 'hello'); // 'hello'
  console.log('hello' || true);  // 'hello'
  console.log('hello' || false); // 'hello'

  // 如果左操作数为真值，那么返回左操作数的值；
  // 如果左操作数为假值，那么返回右操作数的值。
  // 一旦遇到第一个真值，就会立即返回这个真值，并且不会继续计算后续的操作数

  let a = 1
  let b = 3
  console.log(a === 1 || 2) // true，相当于 true || 2
  console.log(a === 2 || 1) // 1，相当于 false || 1
  console.log(b === 1 || 2) // 1，相当于 false || 1
  console.log(a === (1 || 2)) // true，相当于a === 1
  console.log(a === (2 || 1)) // false，相当于a === 2
  console.log(b === (1 || 2)) // false，相当于a === 2


  console.log(a === 1 && 2) // 2，相当于 (a === 1) && 2
  console.log(a === 2 && 1) // false，相当于 (a === 2) && 1
  console.log(b === 1 && 2) // 2，相当于 (a === 1) && 2
  console.log(a === (1 && 2)) // false，相当于 a === 2
  console.log(a === (2 && 1)) // true，相当于 a === 1
  console.log(b === (1 && 2)) // false，相当于 a === 2
</script>

</html>